package com.gaogzhen.datastructure.symbolTable;

/**
 * 符号表接口
 * @author Administrator
 * @version 1.0
 * @description
 * @date 2022-11-11 20:16
 */
public interface ST<K, V> {
    /**
     * 键值对存入符号表
     * @param key       键
     * @param value     值
     */
    void put(K key, V value);

    /**
     * 获取键key对应的值
     * @param key   键
     * @return      值
     */
    V get(K key);

    /**
     * 删除键对应的键值对
     * @param key   键
     * @return      键对应的旧值
     */
    V delete(K key);

    /**
     * 键是否包含在符号表中
     * @param key   键
     * @return      {@code true}如果键在符号表中；否则返回{@code false}
     */
    default boolean contains(K key) {
        return get(key) != null;
    }

    /**
     * 符号表是否为空
     * @return  {@code true}符号表为空;否则返回{@code false}
     */
    default boolean isEmpty() {
        return size() == 0;
    }

    /**
     * 符号表中键值对的数量
     * @return  键值对的数量
     */
    int size();

    /**
     * 键的迭代器
     * @return  键的迭代器
     */
    Iterable<K> keys();
}
